package com.wondertek.service.sdk.iotdh.service;

import com.wondertek.common.base.Result;
import com.wondertek.service.sdk.iotdh.dto.req.*;
import com.wondertek.service.sdk.iotdh.dto.req.arcConfig.AddArcConfigReq;
import com.wondertek.service.sdk.iotdh.dto.req.installer.AddCameraReq;
import com.wondertek.service.sdk.iotdh.dto.req.installer.GetSearchIpcResultReq;
import com.wondertek.service.sdk.iotdh.dto.req.installer.SearchIpcStartingReq;
import com.wondertek.service.sdk.iotdh.dto.req.installer.StopSearchIpcReq;
import com.wondertek.service.sdk.iotdh.dto.res.network.GetAroundWirelessNetworkInfosRes;
import com.wondertek.service.sdk.iotdh.dto.res.network.GetCurrentWirelessNetworkRes;
import com.wondertek.service.sdk.iotdh.dto.res.network.GetMobileNetworkInfoRes;
import com.wondertek.service.sdk.iotdh.dto.res.network.GetNetworkInfoRes;
import com.wondertek.service.sdk.iotdh.dto.req.network.SetMobileNetworkReq;
import com.wondertek.service.sdk.iotdh.dto.req.scene.AddAccessorySceneModeReq;
import com.wondertek.service.sdk.iotdh.dto.req.scene.GetAccessorySceneModesReq;
import com.wondertek.service.sdk.iotdh.dto.req.utc.SetDeviceUTCTimezoneReq;
import com.wondertek.service.sdk.iotdh.dto.res.*;
import com.wondertek.service.sdk.iotdh.dto.res.arcConfig.GetArcConfigRes;
import com.wondertek.service.sdk.iotdh.dto.res.deviceDetail.ListDeviceDetailsByIdsRes;
import com.wondertek.service.sdk.iotdh.dto.res.installer.AddCameraRes;
import com.wondertek.service.sdk.iotdh.dto.res.installer.ComIdRes;
import com.wondertek.service.sdk.iotdh.dto.res.installer.DeviceOnlineRes;
import com.wondertek.service.sdk.iotdh.dto.res.installer.GetSearchIpcResultRes;
import com.wondertek.service.sdk.iotdh.dto.res.pir.SetPIRAccessoryInfoReq;
import com.wondertek.service.sdk.iotdh.dto.res.alarmBell.SetODAlarmBellAccessoryInfoReq;
import com.wondertek.service.sdk.iotdh.dto.res.doorDetector.SetDoorDetectorAccessoryInfoReq;
import com.wondertek.service.sdk.iotdh.dto.res.doorDetectorPlus.SetDoorDetectorPlusAccessoryInfoReq;
import com.wondertek.service.sdk.iotdh.dto.res.keyboard.SetKeyboardAccessoryInfoReq;
import com.wondertek.service.sdk.iotdh.dto.res.scene.GetAccessorySceneModesRes;
import com.wondertek.service.sdk.iotdh.dto.res.test.SensitivityTestReq;
import com.wondertek.service.sdk.iotdh.dto.res.test.SignalStrengthTestReq;
import com.wondertek.service.sdk.iotdh.dto.res.utc.GetDevUTCTimezoneRes;

import java.util.List;

public interface DhDeviceService {
    /**
     * 新增设备
     */
    Result<DeviceAddDhRes> addDevice(DeviceDhAddReq req);


    /**
     * 删除设备
     */
    Result<?> deleteDevice(DeviceDhDeleteReq req);


    /**
     * 查询设备
     */
    Result<DevicePageRes> pageDevice(DeviceListReq req);

    /**
     * 视频推拉流创建
     */
    Result<String> addStreamUrl(StreamUrlAddDhReq req);

    /**
     * 设备操作 包括 抓图 重启 移动
     */
    Result<?> operate(OperateDhReq req);

    /**
     * 设置定时部防撤防信息：对⽹关整体部防撤防进⾏设置
     */
    Result<?> setTimingArmInfos(SetTimingArmInfosReq req);


    /**
     * 查询报警⽹关定时布撤防信息
     */
    Result<GetTimingArmInfosRes> getTimingArmInfos(ComId req);


    /**
     * 告警列表查询
     */
    Result<PageAlarmRes> pageAlarm(AlarmListDhReq req);


    /**
     * 设置分区信息
     */
    Result<?> setAreaInfo(AetAreaInfoReq req);

    /**
     * 设置分区布防模式
     */
    Result<SetAreaArmModeRes> setAreaArmMode(SetAreaArmModeReq req);


    /**
     * 查询网关设备的分区信息
     */
    Result<GetAreaInfosRes> getAreaInfos(GetAreaInfosReq req);

    /**
     * 查询该网关设备下的分区布防模式
     */
    Result<GetAreaArmModeRes> getAreaArmMode(GetAreaInfosReq req);

    /**
     * 设置⽹关与配件配对：将设备挂载到⽹关下
     */
    Result<?> setAccessoryPair(SetAccessoryPairReq req);

    /**
     * 删除网关设备下的配件
     */
    Result<?> deleteAccessory(DeleteAccessoryReq req);

    /**
     * 设置配件分区：更改配件的分区
     */
    Result<?> setAccessoryArea(SetAccessoryAreaReq req);


    /**
     * 查询配件信息
     */
    Result<List<GetAccessoryInfoRes>> getAccessoryInfo(GetAccessoryInfoReq req);


    /**
     * 数据订阅接⼝
     */
    Result<?> subscribeDatas(SubscribeDatasDhReq req);

    /**
     * 取消订阅接⼝
     */
    Result<?> subscribeCancel(SubscribeCancelDhReq req);


    /**
     * 查询⽹关设备状态
     */
    Result<GetStatusRes> getStatus(GetStatusReq req);


    /**
     * 查询报警⽹关使能
     */
    Result<Boolean> getEnable(GetEnableReq req);


    /**
     * 配置报警⽹关使能
     */
    Result<?> setEnable(SetEnableReq req);


    /**
     * 设置烟感信息
     */
    Result<?> setSmokeAccessoryInfo(SetSmokeAccessoryInfoReq req);

    /**
     * 配置有线⽹络
     */
    Result<?> setNetworkInfo(SetNetworkInfoReq req);

    /**
     * 配置⽆线⽹络
     */
    Result<?> modifyWirelessNetwork(ModifyWirelessNetwork req);

    /**
     * 设置⽆线键盘信息
     */
    Result<?> setKeyboardAccessoryInfo(SetKeyboardAccessoryInfoReq req);

    /**
     * 设置室外警号
     */
    Result<?> setODAlarmBellAccessoryInfo(SetODAlarmBellAccessoryInfoReq req);

    /**
     * 设置⻔磁信息
     */
    Result<?> setDoorDetectorAccessoryInfo(SetDoorDetectorAccessoryInfoReq req);

    /**
     * 设置升级⻔磁信息
     */
    Result<?> setDoorDetectorPlusAccessoryInfo(SetDoorDetectorPlusAccessoryInfoReq req);

    /**
     * 设置PIR相机信息
     */
    Result<?> setPIRAccessoryInfo(SetPIRAccessoryInfoReq req);

    /**
     * 配件灵敏度测试
     */
    Result<?> sensitivityTest(SensitivityTestReq req);

    /**
     * 信号强度测试
     */
    Result<?> signalStrengthTest(SignalStrengthTestReq req);

    /**
     * 获取回放列表
     */
    Result<List<LocalRecordRes>> LocalRecords(LocalRecordsReq req);

    /**
     * 设备-dolynck平台绑定状态查询
     */
    Result<CheckDeviceBindInfoRes> checkDeviceBindInfo(ComId req);

    /**
     * 获取ipc搜索实例(返回的的id⽤于后续操作)
     */
    Result<ComIdRes> getIpcInstance(ComId req);

    /**
     * 搜索附近IPC设备(该接⼝结合 获取搜索结果接⼝⼀起使⽤，⽤于添加IPC到⽹关)
     */
    Result<?> searchIpcStarting(SearchIpcStartingReq req);

    /**
     * 获取IPC设备搜索结果(在调⽤完搜索附近IPC设备后调⽤，能够获取上⼀个接⼝的搜索结果)
     */
    Result<List<GetSearchIpcResultRes>> getSearchIpcResult(GetSearchIpcResultReq req);

    /**
     * 停⽌搜索IPC设备
     */
    Result<?> stopSearchIpc(StopSearchIpcReq req);


    /**
     * 将IPC设备添加到⽹关下 (将IPC设备添加到⽹关下
     * 整体流程为：
     * 使⽤开发者平台接⼝Start searching for ipc devices开始搜索IPC设备，然后可以
     * 使⽤接⼝Getting Search Results of IPC获取搜索ipc设备结果。停⽌搜索IPC设备
     * 的接⼝是Stop searching for IPC。搜索到IPC设备后可以使⽤Add video
     * channels接⼝，将IPC添加到报警⽹关下)
     */

    Result<AddCameraRes> addCamera(AddCameraReq req);


    /**
     *配置设备的 UTC 时间 支持夏令时
     */
    Result<?> setDeviceUTCTimezone(SetDeviceUTCTimezoneReq req);

    /**
     *搜索设备时区和夏令时 （DST） 的配置
     */
    Result<GetDevUTCTimezoneRes> getDevUTCTimezone(ComId req);

    /**
     *设置设备或配件心跳时间
     */
    Result<?> setHeartbeat(SetHeartbeatReq req);

    /**
     *查询配件情景模式列表
     */
    Result<GetAccessorySceneModesRes> getAccessorySceneModes(GetAccessorySceneModesReq req);

    /**
     *新增配件情景模式
     */
    Result<?> addAccessorySceneMode(AddAccessorySceneModeReq req);

    /**
     *添加报警接收中心配置
     */
    Result<?> addArcConfig(AddArcConfigReq req);

    /**
     * 搜索报警接收中心配置
     */
    Result<GetArcConfigRes> getArcConfig(ComId req);

    /**
     *查询设备在离线
     */
    Result<DeviceOnlineRes> deviceOnline(ComId req);

    /**
     *数据订阅记录列表
     */
    Result<?> subscribeList();

    /**
     *修改设备密码
     */
    Result<?> modifyDevCode(ModifyDevCodeReq req);


    /**
     *确认设备密码
     */
    Result<?> verifyDevCode(VerifyDevCodeReq req);


    /**
     *设备升级
     */
    Result<?> upgradeDevice(VerifyDevCodeReq req);

    /**
     *设备使能
     */
    Result<?> setAbilityStatus(SetAbilityStatusReq req);

    /**
     *设置移动网络
     */
    Result<?> setMobileNetwork(SetMobileNetworkReq req);

    /**
     *批量搜索设备详细信息
     */
    Result<ListDeviceDetailsByIdsRes> listDeviceDetailsByIds(ListDeviceDetailsByIdsReq req);

    /**
     *搜索有线网络信息
     */
    Result<GetNetworkInfoRes> getNetworkInfo(ComId req);

    /**
     * 搜索 Alarm Hub 正在使用的无线网络信息
     */
    Result<GetCurrentWirelessNetworkRes> getCurrentWirelessNetwork(ComId req);

    /**
     * 搜索Alarm Hub的移动网络信息
     */
    Result<List<GetMobileNetworkInfoRes>> getMobileNetworkInfo(ComId req);

    /**
     * 搜索 Alarm Hub 周围的无线网络信息
     */
    Result<GetAroundWirelessNetworkInfosRes> getAroundWirelessNetworkInfos(ComId req);

    /**
     * 搜索 Alarm Hub 的云更新版本
     */
    Result<GetUpgradeVersionInfoRes> getUpgradeVersionInfo(ComId req);


    /**
     * 搜索Alarm Hub的云更新进度
     */
    Result<GetUpgradeProgressRes> getUpgradeProgress(ComId req);

    /**
     *搜索连接到 Alarm Hub 的附件的状态。
     */
    Result<List<GetAccessoryStatusRes>> getAccessoryStatus(GetAccessoryInfoReq req);

    /**
     * 获取设备版本和可升级信息(NEW)
     */
    Result<DeviceVersionListRes> deviceVersionList(DeviceVersionListReq req);
}
